#include<iostream>
#include<cstring>
using namespace std;
const int N = 110;
int map[N][N];
int d[N][N];
int n, m;
typedef pair<int, int> PII;
PII q[N * N], Prev[N][N];
int hh, tt;
int dx[4] = { -1,1,0,0 };
int dy[4] = { 0,0,-1,1 };
int Bfs()
{
	memset(d, -1, sizeof(d));
	q[0] = { 0,0 };
	d[0][0] = 0;
	while (hh <= tt) {
		PII temp = q[hh++];
		for (int i = 0; i < 4; i++) {
			int x = dx[i] + temp.first;
			int y = dy[i] + temp.second;
			if (x >= 0 && x < n && y >= 0 && y < m &&	
				d[x][y] == -1 && map[x][y] == 0) {
				d[x][y] = d[temp.first][temp.second] + 1;
				Prev[x][y] = temp;
				q[++tt] = { x,y };
			}
		}
	}
	int x = n - 1;
	int y = m - 1;
	while (x || y) {
		cout << x << " " << y << endl;
		PII temp = Prev[x][y];
		x = temp.first, y = temp.second;
	}
	return d[n - 1][m - 1];
}
int main()
{
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> map[i][j];
		}
	}
	cout << Bfs() << endl;
	return 0;
}